package fifteenth.Class类的使用;
class Person{
    private String name;
    private int age;
public Person(){}//如果使用了newInstance（）被实例化对象的类中就必须要有无参构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 上面的构造方法我是试了一下有这样的规律：
     * 只写含参构造，报错
     * 只写无参构造，不报错
     * 无参构造含参构造都写，不报错
     * 总结：就是不能只写一个含参构造
     *
     * 构造方法补充：
     * 如果一个类没有显式定义任何构造方法，系统会为其提供一个无参构造。
     * 如果一个类只定义了有参构造而没有无参构造，实例化对象时只能调用该有参构造，不能调用无参构造。
     *
     */
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "姓名：" + name +
                ", 年龄" + age ;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
public class 通过无参构造实例化对象 {
    public static void main(String[] args)   {
        Class<?> c = null;
        try {
            c = Class.forName("fifteenth.Class类的使用.Person");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        Person per = null;
        try {
            per = (Person) c.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        per.setName("王境泽");
        per.setAge(18);
        System.out.println(per);
    }
}
////如果使用了newInstance（）就必须要有构造方法
/**
 * 提示：各种高级应用中都提倡类中存在无参构造方法
 * 在Java中，反射是最重要的操作原理，在现在的开发设计中大量地应用了反射处理机制，如Structs，Spring框架；
 * 大部分都是操作无参构造方法，所以希望读者在以后使用反射开发代码的时候 一定要保留无参构造方法
 */
/*
D:\WorkSpaces\Java\jdk-21\bin\java.exe "-javaagent:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=53891:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\WorkSpaces\JavaDevelopBase_start_329\out\production\JavaDevelopBase_start_329 fifteenth.Class类的使用.通过无参构造实例化对象
姓名：王境泽', 年龄18

Process finished with exit code 0
 */